﻿        using System;
        using System.Collections.Generic;
        using System.ComponentModel;
        using System.Data;
        using System.Drawing;
        using System.Linq;
        using System.Text;
        using System.Windows.Forms;
        using System.Data.SqlClient;
        using Rizmar.RizmarDataSetTableAdapters;
        using System.Text.RegularExpressions;

        namespace Rizmar
        {
        public partial class LancamentoForm : Form
        {
            private int n_titulos;
            private Titulo[] titulos;
            public LancamentoForm()
            {
                titulos = new Titulo[20];
                n_titulos = 0;
                InitializeComponent();
            }

            private void novoTitulo_Click(object sender, EventArgs e)
            {
                    Titulo novo = new Titulo();
                    
                    /*Configuração de alguns atributos do novo título*/
                    novo.Location = (new System.Drawing.Point(0, panelPrincipal.Controls[panelPrincipal.Controls.Count - 1].Location.Y + 117));
                    novo.buttonPesquisarSacado.Click += (new EventHandler(buttonPesquisarSacado_Click));
                    novo.comboBoxCpfCnpj.TextChanged += (new EventHandler(comboBoxCpfCnpj_TextChanged));
                    foreach (Control c in novo.Controls)
                          c.Leave += (new EventHandler(Control_Leave));
                    novo.textBoxValor.KeyPress += (new KeyPressEventHandler(textBoxValor_KeyPress));
                    novo.textBoxDeságio.KeyPress += new KeyPressEventHandler(textBoxDesagio_KeyPress);
                    novo.textBoxLíquido.KeyPress += new KeyPressEventHandler(textBoxLíquido_KeyPress);
                    novo.textBoxDias.KeyPress += new KeyPressEventHandler(textBoxDias_KeyPress);
                    novo.textBoxD.KeyPress += new KeyPressEventHandler(textBoxD_KeyPress);

                    panelPrincipal.Controls.Add(novo);
                    titulos[n_titulos++] = novo;
                  
                    novoButton.Enabled = false;
                    excluirButton.Enabled = true;
                    imprimirButton.Enabled = false;
            }

            private void excluirButton_Click(object sender, EventArgs e)
            {
                if (n_titulos > 1)
                {
                    panelPrincipal.Controls.Remove(panelPrincipal.Controls[n_titulos - 1]);
                    n_titulos--;
                    novoButton.Enabled = true;
                    imprimirButton.Enabled = true;
                    excluirButton.Enabled = false;
                    alterarButton.Enabled = false;
                }
            }

            private void buttonPesquisaCliente_Click(object sender, EventArgs e)
            {
                PesquisaClienteForm form = new PesquisaClienteForm(this);
                form.ShowDialog();
            }

            public void buttonPesquisarSacado_Click(object sender, EventArgs e)
            {
                PesquisaSacadoForm form = new PesquisaSacadoForm(this);
                form.ShowDialog();
            }

            public void setClienteTextBox(string cliente) {
                textBoxCliente.Text = cliente;
            }

            public void setClienteID(string cod) {
                textBoxCódigo.Text = cod.ToString();
            }

            private void salvarButton_Click(object sender, EventArgs e)
            {
                RizmarDataSetTableAdapters.TituloTableAdapter cta = new TituloTableAdapter();

                int inseriu;
                int cliente_id, sacado_id, dias, d;
                float valor, desagio, liquido;
                bool tipo,tipo_serviço, status;
                DateTime data_base, vencimento;
                string codigo, banco;

                cliente_id = Convert.ToInt32(textBoxCódigo.Text);
                sacado_id = Convert.ToInt32(titulos[n_titulos-1].labelCodigoSacado.Text);
                codigo = titulos[n_titulos - 1].textBoxNum.Text;
                valor = (float) Convert.ToDouble(titulos[n_titulos-1].textBoxValor.Text);
                if (titulos[n_titulos - 1].comboBoxTipo.Text == "C")
                    tipo = true;
                else
                    tipo = false;
                banco = titulos[n_titulos - 1].textBoxBanco.Text;
                data_base = Convert.ToDateTime(titulos[n_titulos - 1].dateTimePickerDataBase.Text);
                vencimento = Convert.ToDateTime(titulos[n_titulos - 1].dateTimePickerVencimento.Text);
                dias = Convert.ToInt32(titulos[n_titulos-1].textBoxDias.Text);
                desagio = (float)Convert.ToDouble(titulos[n_titulos - 1].textBoxDeságio.Text);
                liquido = (float)Convert.ToDouble(titulos[n_titulos - 1].textBoxLíquido.Text);
                if (tipoComboBox.Text == "Factoring")
                    tipo_serviço = true;
                else
                    tipo_serviço = false;
                status = true;

                if (titulos[n_titulos - 1].textBoxD.Text != "")
                {
                    d = Convert.ToInt32(titulos[n_titulos - 1].textBoxD.Text);
                    inseriu = cta.Insert(cliente_id, sacado_id, codigo, valor, tipo, banco, data_base, vencimento, dias, d, desagio, liquido, tipo_serviço, status);
                }
                else
                    inseriu = cta.Insert(cliente_id, sacado_id, codigo, valor, tipo, banco, data_base, vencimento,dias, null, desagio, liquido, tipo_serviço, status);

                if (inseriu > 0)
                {
                    
                    /*Depois que os dados são salvos, alguns controles são desabilitados*/
                    titulos[n_titulos - 1].textBoxBanco.Enabled = false;
                    titulos[n_titulos - 1].textBoxCpfCnpj.Enabled = false;
                    titulos[n_titulos - 1].textBoxD.Enabled = false;
                    titulos[n_titulos - 1].textBoxDeságio.Enabled = false;
                    titulos[n_titulos - 1].textBoxDias.Enabled = false;
                    titulos[n_titulos - 1].textBoxLíquido.Enabled = false;
                    titulos[n_titulos - 1].textBoxNum.Enabled = false;
                    titulos[n_titulos - 1].textBoxValor.Enabled = false;
                    titulos[n_titulos - 1].dateTimePickerDataBase.Enabled = false;
                    titulos[n_titulos - 1].dateTimePickerVencimento.Enabled = false;
                    titulos[n_titulos - 1].comboBoxCpfCnpj.Enabled = false;
                    titulos[n_titulos - 1].comboBoxTipo.Enabled = false;
                    titulos[n_titulos - 1].buttonPesquisarSacado.Enabled = false;
                    buttonPesquisaCliente.Enabled = false;
                    tipoComboBox.Enabled = false;

                    /*Configuração da disponibilidade dos botões*/
                    salvarButton.Enabled = false;
                    excluirButton.Enabled = false;
                    novoButton.Enabled = true;
                    imprimirButton.Enabled = true;
                    alterarButton.Enabled = true;
                }
            }

            private void Control_Leave(object sender, EventArgs e) {
                if (!titulos[n_titulos - 1].tituloVazio() && textBoxCliente.Text != "")
                    salvarButton.Enabled = true;
                else
                    salvarButton.Enabled = false;
            }

            private void LancamentoForm_Load(object sender, EventArgs e)
            {
                Titulo novo = new Titulo();

                /*Configuração de alguns atributos do novo título*/
                novo.Location = (new System.Drawing.Point(0, 0));
                novo.buttonPesquisarSacado.Click += (new EventHandler(buttonPesquisarSacado_Click));
                novo.comboBoxCpfCnpj.TextChanged += (new EventHandler(comboBoxCpfCnpj_TextChanged));
                foreach (Control c in novo.Controls)
                      c.Leave += (new EventHandler(Control_Leave));
                novo.textBoxValor.KeyPress += new KeyPressEventHandler(textBoxValor_KeyPress);
                novo.textBoxDeságio.KeyPress += new KeyPressEventHandler(textBoxDesagio_KeyPress);
                novo.textBoxLíquido.KeyPress += new KeyPressEventHandler(textBoxLíquido_KeyPress);
                novo.textBoxValor.Enter += new EventHandler(textBox_Enter);
                novo.textBoxDeságio.Enter += new EventHandler(textBox_Enter);
                novo.textBoxLíquido.Enter += new EventHandler(textBox_Enter);
                novo.textBoxDias.KeyPress += new KeyPressEventHandler(textBoxDias_KeyPress);
                novo.textBoxD.KeyPress += new KeyPressEventHandler(textBoxD_KeyPress);

                /*Adiciona novo título ao vetor de títulos*/
                titulos[n_titulos++] = novo;

                /*Adiciona novo título ao painel principal*/
                panelPrincipal.Controls.Add(novo);

                /*Configuração da disponibilidade dos botões*/
                novoButton.Enabled = false;
                excluirButton.Enabled = false;
                salvarButton.Enabled = false;
                imprimirButton.Enabled = false;
                alterarButton.Enabled = false;
            }

            public Titulo getUltimoTitulo() {
                return titulos[n_titulos - 1];
            }


            public void comboBoxCpfCnpj_TextChanged(object sender, EventArgs e)
            {
                if (titulos[n_titulos-1].comboBoxCpfCnpj.Text == "CPF")
                  titulos[n_titulos - 1].textBoxCpfCnpj.Mask = "000.000.000-00";
                else
                    titulos[n_titulos - 1].textBoxCpfCnpj.Mask = "00.000.000/0000-00";
            }

            private void alterarButton_Click(object sender, EventArgs e)
            {
                excluirButton.Enabled = false;
                novoButton.Enabled = false;
                imprimirButton.Enabled = false;
                alterarButton.Enabled = false;
                if (!titulos[n_titulos - 1].tituloVazio() && textBoxCliente.Text != "")
                    salvarButton.Enabled = true;
                else
                    salvarButton.Enabled = false;

                titulos[n_titulos - 1].textBoxBanco.Enabled = true;
                titulos[n_titulos - 1].textBoxCpfCnpj.Enabled = true;
                titulos[n_titulos - 1].textBoxD.Enabled = true;
                titulos[n_titulos - 1].textBoxDeságio.Enabled = true;
                titulos[n_titulos - 1].textBoxDias.Enabled = true;
                titulos[n_titulos - 1].textBoxLíquido.Enabled = true;
                titulos[n_titulos - 1].textBoxNum.Enabled = true;
                titulos[n_titulos - 1].textBoxValor.Enabled = true;
                titulos[n_titulos - 1].dateTimePickerDataBase.Enabled = true;
                titulos[n_titulos - 1].dateTimePickerVencimento.Enabled = true;
                titulos[n_titulos - 1].comboBoxCpfCnpj.Enabled = true;
                titulos[n_titulos - 1].comboBoxTipo.Enabled = true;
                titulos[n_titulos - 1].buttonPesquisarSacado.Enabled = true;

                if (n_titulos == 1)
                {
                    buttonPesquisaCliente.Enabled = true;
                    tipoComboBox.Enabled = true;
                }
            }

            private void textBoxValor_KeyPress(object sender, KeyPressEventArgs e)
            {

                if (!char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar) && e.KeyChar != '.')
                   e.Handled = true;
                if (e.KeyChar == '.' && titulos[n_titulos - 1].textBoxValor.Text.Contains("."))
                   e.Handled = true;
                if (titulos[n_titulos - 1].textBoxValor.Text.Contains(".") && (titulos[n_titulos - 1].textBoxValor.Text.Length - titulos[n_titulos - 1].textBoxValor.Text.IndexOf('.') >= 3) && !char.IsControl(e.KeyChar))
                    e.Handled = true;      
            }

            private void textBoxDesagio_KeyPress(object sender, KeyPressEventArgs e)
            {

                if (!char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar) && e.KeyChar != '.')
                    e.Handled = true;
                if (e.KeyChar == '.' && titulos[n_titulos - 1].textBoxDeságio.Text.Contains("."))
                    e.Handled = true;
                if (titulos[n_titulos - 1].textBoxDeságio.Text.Contains(".") && (titulos[n_titulos - 1].textBoxDeságio.Text.Length - titulos[n_titulos - 1].textBoxDeságio.Text.IndexOf('.') >= 3) && !char.IsControl(e.KeyChar))
                    e.Handled = true;
            }

            private void textBoxLíquido_KeyPress(object sender, KeyPressEventArgs e)
            {

                if (!char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar) && e.KeyChar != '.')
                    e.Handled = true;
                if (e.KeyChar == '.' && titulos[n_titulos - 1].textBoxLíquido.Text.Contains("."))
                    e.Handled = true;
                if (titulos[n_titulos - 1].textBoxLíquido.Text.Contains(".") && (titulos[n_titulos - 1].textBoxLíquido.Text.Length - titulos[n_titulos - 1].textBoxLíquido.Text.IndexOf('.') >= 3) && !char.IsControl(e.KeyChar))
                    e.Handled = true;
                
            }

            private void textBox_Enter(object sender, EventArgs e)
            {
                System.Windows.Forms.Clipboard.Clear();
            }

            private void tipoComboBox_Leave(object sender, EventArgs e)
            {
                if (!titulos[n_titulos - 1].tituloVazio() && textBoxCliente.Text != "")
                    salvarButton.Enabled = true;
                else
                    salvarButton.Enabled = false;
            }


            private void textBoxDias_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (!char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar))
                    e.Handled = true;
            }



            private void textBoxD_KeyPress(object sender, KeyPressEventArgs e)
            { 
                if (!char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar))
                    e.Handled = true;
            }
        }
        }
